#ifndef LOG_H
#define LOG_H

#include <stdio.h>
#include <stdarg.h>
#include <stdbool.h>

// 日志级别定义
enum log_level {
    LOG_LEVEL_DEBUG,
    LOG_LEVEL_INFO,
    LOG_LEVEL_WARN,
    LOG_LEVEL_ERROR,
    LOG_LEVEL_FATAL
};

// 日志配置结构体
typedef struct {
    enum log_level level;
    const char *log_file;
    bool console_output;
    bool file_output;
    int max_file_size; // 单位：KB
    int max_files;     // 最大日志文件数
} log_config_t;

/**
 * @brief 初始化日志系统
 */
void log_init(void);

/**
 * @brief 清理日志系统资源
 */
void log_cleanup(void);

/**
 * @brief 设置日志配置
 * @param config 日志配置参数
 */
void log_set_config(log_config_t *config);

/**
 * @brief 设置日志级别
 * @param level 日志级别
 */
void log_set_level(enum log_level level);

/**
 * @brief 日志输出函数
 * @param level 日志级别
 * @param file 文件名
 * @param line 行号
 * @param func 函数名
 * @param format 格式化字符串
 * @param args 可变参数列表
 */
void log_output(enum log_level level, const char *file, int line, const char *func, 
               const char *format, va_list args);

// 日志包装函数声明
void log_debug(const char *format, ...);
void log_info(const char *format, ...);
void log_warn(const char *format, ...);
void log_error(const char *format, ...);
void log_fatal(const char *format, ...);

// 日志宏定义
#define LOG_DEBUG(...) log_debug(__VA_ARGS__)
#define LOG_INFO(...) log_info(__VA_ARGS__)
#define LOG_WARN(...) log_warn(__VA_ARGS__)
#define LOG_ERROR(...) log_error(__VA_ARGS__)
#define LOG_FATAL(...) log_fatal(__VA_ARGS__)

#endif /* LOG_H */